import { mount } from 'vue-test-utils'
import tipsBtn from 'src/views/tipsBtn/src/tipsBtn.vue'
// 获取 tips
const getTips = (tips) => {
  const temp = {
    normalTips: '普通tips',               // 普通 tips
    basicSplitTips: '基本分隔;基本分隔',   // 基本的 ; 符号分隔 tips
    otherSplitTips: '其他分隔-其他分隔'    // 其他符号的分隔 tips (-)
  }
  return temp[tips] || ''
}

describe('tipsBtn', () => {
  it('基础属性用例: { tips, split }', () => {
    // 使用mount可以创建一个包涵被挂载和渲染的一个实例
    const vm = mount(tipsBtn, {
      propsData: {
        tips: 'normalTips',
        split: '-'
      },
      mocks: {
        getTips
      }
    })
    expect(vm.props().tips).to.be.equal('normalTips')
    expect(vm.props().split).to.be.equal('-')
    // 会根据 split 去分割成数组,长度为1代表没有分隔符
    expect(vm.classes().includes('x-tipsSplit')).to.be.equal(false)
    expect(vm.vm.tipsed.length).to.be.equal(1)
    expect(vm.vm.isSplit).to.be.equal(false)  // 没有分隔符
    expect(vm.vm.tipsed[0]).to.be.equal('普通tips')
  })

  it('tips 插槽用例，不带分隔符', () => {
    // 使用mount可以创建一个包涵被挂载和渲染的一个实例
    const vm = mount(tipsBtn, {
      propsData: {
        tips: 'normalTips',
        split: '-'
      },
      mocks: {
        getTips
      },
      slots: {
        default: '<p>default插槽</p>'
      }
    })
    expect(vm.vm.isSplit).to.be.equal(false) // 没有分隔符
    expect(vm.props().tips).to.be.equal('normalTips')
    expect(vm.props().split).to.be.equal('-')
    // 会根据 split 去分割成数组,长度为1代表没有分隔符
    expect(vm.classes().includes('x-tipsSplit')).to.be.equal(false)
    expect(vm.vm.tipsed.length).to.be.equal(1)
    expect(vm.vm.tipsed[0]).to.be.equal('普通tips')
    expect(vm.html()).to.be.equal('<span><p>default插槽</p></span>')
  })

  it('splitTips 插槽用例，带有分隔符号', () => {
    // 使用mount可以创建一个包涵被挂载和渲染的一个实例
    const vm = mount(tipsBtn, {
      propsData: {
        tips: 'basicSplitTips'
      },
      mocks: {
        getTips
      },
      slots: {
        default: '<p>default插槽</p>'
      }
    })
    expect(vm.props().tips).to.be.equal('basicSplitTips')
    expect(vm.vm.split).to.be.equal(';')
    expect(vm.vm.tipsed.length > 1).to.be.equal(true) // 有分隔符号
    expect(vm.vm.isSplit).to.be.equal(true)           // 有分隔符号
    expect(vm.classes().includes('x-tipsSplit')).to.be.equal(true)
    expect(vm.contains('i')).to.be.equal(true)
    expect(vm.contains('.tips-icon')).to.be.equal(true)
    expect(vm.text()).to.be.equal('default插槽')
  })

  it('其他分隔符用例', () => {
    // 使用mount可以创建一个包涵被挂载和渲染的一个实例
    const vm = mount(tipsBtn, {
      propsData: {
        tips: 'otherSplitTips',
        split: '-'
      },
      mocks: {
        getTips
      },
      slots: {
        default: '<p>default插槽</p>'
      }
    })
    expect(vm.props().tips).to.be.equal('otherSplitTips')
    expect(vm.vm.split).to.be.equal('-')
    expect(vm.vm.tipsed.length > 1).to.be.equal(true) // 有分隔符号
    expect(vm.vm.isSplit).to.be.equal(true)           // 有分隔符号
    expect(vm.classes().includes('x-tipsSplit')).to.be.equal(true)
    expect(vm.contains('i')).to.be.equal(true)
    expect(vm.contains('.tips-icon')).to.be.equal(true)
    expect(vm.text()).to.be.equal('default插槽')
  })

  it.only('模拟弹框用例', async () => {
    // 使用mount可以创建一个包涵被挂载和渲染的一个实例
    const vm = mount(tipsBtn, {
      propsData: {
        tips: 'basicSplitTips'
      },
      mocks: {
        getTips,
        $popup: (components, { arr, title }) => {
          return new Promise((resolve, reject) => {
            // 确保传入的参数正确
            expect(title).to.be.equal('名词释义')
            expect(arr.length).to.be.equal(2)
            resolve()
          })
        }
      }
    })
    await vm.trigger('click')
    await vm.vm.$nextTick()
    expect(vm.props().tips).to.be.equal('basicSplitTips')
    expect(vm.vm.split).to.be.equal(';')
    expect(vm.vm.tipsed.length > 1).to.be.equal(true) // 有分隔符号
    expect(vm.vm.isSplit).to.be.equal(true)           // 有分隔符号
    expect(vm.classes().includes('x-tipsSplit')).to.be.equal(true)           // 有分隔符号
    expect(vm.contains('i')).to.be.equal(true)
    expect(vm.contains('.tips-icon')).to.be.equal(true)
    expect(vm.text()).to.be.equal('')
  })
})
